//路由鉴权：项目中路由能不能被访问的权限的设置（比如该路由在什么条件下可以被访问）
import router from "./router";
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import setting from "./setting";

//获取用户相关 的小仓库来获取token判断是否登录成功
import useUserStore from "./store/modules/user";
import pinia from "./store";
//取消圆圈进度显示
NProgress.configure({ showSpinner: false });
let userStore = useUserStore(pinia)
//全局守卫，项目中任意一个路由切换都会被触发的钩子
//全局前置守卫
router.beforeEach(async (to, from, next) => {
    document.title = setting.title + '-' + to.meta.title
    NProgress.start();
    let token = userStore.token
    let username = userStore.username
    //通过有无token来判断用户是否登录
    if (token) {
        //用户已登录成功，可以访问除了登录的其他路由
        if (to.path == '/login') {
            next({ path: '/' })
        } else {
            //登陆成功访问其他6个路由
            if (username) {
                //如果有用户信息就放行
                next()
            } else {
                //如果没有用户就在守卫这里发请求获取用户信息再放行
                try {
                    //获取用户信息
                    await userStore.userInfo()
                    //当异步路由加载完成之后再放行
                    next({ ...to, replace: true })
                } catch (error) {
                    //token过期
                    //用户手动清除本地存储token
                    //过期后的后续操作：退出登录
                    await userStore.userLogout()
                    next({ path: '/login' })
                }
            }

        }
    } else {
        //用户未登录
        if (to.path == '/login') {
            next()
        } else {
            next({ path: '/login', query: { redirect: to.path } })
        }
    }

})
//全局后置守卫
router.afterEach((to, from) => {
    NProgress.done();
})